/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.ufc.quixada.adrs.dao;

import br.ufc.quixada.adrs.dao.config.PostGresMapConfig;
import br.ufc.quixada.adrs.model.Administrador;
import br.ufc.quixada.adrs.model.Contato;
import java.sql.SQLException;
import java.util.List;

/**
 *
 * @author Caio
 */
public class AdministradorDAO {

   public void insert(Administrador administrador) throws SQLException {
        Long l = (Long) PostGresMapConfig.getSqlMapClient().queryForObject("getMaxIdUsuario");
        if (l == null) {
            l = 0L;
        }
        administrador.getUsuario().setId(l + 1);

        l = (Long) PostGresMapConfig.getSqlMapClient().queryForObject("getMaxIdEndereco");
        if (l == null) {
            l = 0L;
        }
       administrador.getUsuario().getEndereco().setId(l + 1);

        Long id = (Long) PostGresMapConfig.getSqlMapClient().queryForObject("getMaxIdContato");
        if (id == null) {
            id = 0L;
        }
        for (Contato d :administrador.getUsuario().getContatos()) {
            d.setId(++id);
        }

        id = getProxId();
        administrador.setId(id);

        PostGresMapConfig.getSqlMapClient().insert("addAdministrador", administrador);
    }

    public void update(Administrador administrador) throws SQLException {
        Long id = (Long) PostGresMapConfig.getSqlMapClient().queryForObject("getMaxIdContato");
        if (id == null) {
            id = 0L;
        }
        for (Contato d : administrador.getUsuario().getContatos()) {
            d.setId(++id);
        }
        PostGresMapConfig.getSqlMapClient().update("updateAdministrador", administrador);
    }

    public void reativarAdmin(Administrador administrador) throws SQLException {
        PostGresMapConfig.getSqlMapClient().update("reativarAdministrador", administrador);
    }

    public void delete(Long id) throws SQLException {
        PostGresMapConfig.getSqlMapClient().delete("deleteAdministrador", id);
    }

    public Administrador getAdministradorById(Long id) throws SQLException{
        return (Administrador) PostGresMapConfig.getSqlMapClient().queryForObject("getAdministradorById", id);
    }

    public Administrador getByUsuarioId(Long id) throws SQLException{
        return (Administrador) PostGresMapConfig.getSqlMapClient().queryForObject("getAdministradorByUsuarioId", id);
    }

    public Administrador getByUsuarioIdToAivarConta(Long id) throws SQLException{
        return (Administrador) PostGresMapConfig.getSqlMapClient().queryForObject("getAdministradorByUsuarioIdToAtivaConta", id);
    }

    public List<Administrador> getAll() throws SQLException {
        return (List<Administrador>) PostGresMapConfig.getSqlMapClient().queryForList("getAllAdministradores");
    }

    private Long getProxId() throws SQLException {
        Long id = (Long) PostGresMapConfig.getSqlMapClient().queryForObject("getMaxId");
        if (id == null) {
            id = 0L;
        }
        return id + 1L;
    }
    
    public List<Administrador> getExcluidos() throws SQLException {
        return (List<Administrador>) PostGresMapConfig.getSqlMapClient().queryForList("getAdminExcluidos");
    }

}
